if ( !new_entry )
return -ENOMEM;
- irq_desc = pirq_spin_lock_irq_desc(d, pirq, NULL);
+ irq_desc = pirq_spin_lock_irq_desc(pirq, NULL);
if ( !irq_desc )
{
xfree(new_entry);
ASSERT(spin_is_locked(&pcidevs_lock));
ASSERT(spin_is_locked(&d->event_lock));
- irq_desc = pirq_spin_lock_irq_desc(d, pirq, NULL);
+ irq_desc = pirq_spin_lock_irq_desc(pirq, NULL);
if ( !irq_desc )
return;
struct irq_desc *domain_spin_lock_irq_desc(
struct domain *d, int pirq, unsigned long *pflags)
{
- int irq;
- unsigned long flags;
- struct irq_desc *desc;
+ const struct pirq *info = pirq_info(d, pirq);
- for ( ; ; )
- {
- irq = domain_pirq_to_irq(d, pirq);
- if ( irq <= 0 )
- return NULL;
- desc = irq_to_desc(irq);
- spin_lock_irqsave(&desc->lock, flags);
- if ( irq == domain_pirq_to_irq(d, pirq) )
- break;
- spin_unlock_irqrestore(&desc->lock, flags);
- }
-
- if ( pflags != NULL )
- *pflags = flags;
- return desc;
+ return info ? pirq_spin_lock_irq_desc(info, pflags) : NULL;
}
/*
* Same with struct pirq already looked up.
*/
struct irq_desc *pirq_spin_lock_irq_desc(
- struct domain *d, const struct pirq *pirq, unsigned long *pflags)
+ const struct pirq *pirq, unsigned long *pflags)
{
struct irq_desc *desc;
unsigned long flags;
struct irq_desc *desc;
ASSERT(local_irq_is_enabled());
- desc = pirq_spin_lock_irq_desc(d, pirq, NULL);
+ desc = pirq_spin_lock_irq_desc(pirq, NULL);
if ( desc )
desc_guest_eoi(d, desc, pirq);
}
BUG_ON(!local_irq_is_enabled());
retry:
- desc = pirq_spin_lock_irq_desc(v->domain, pirq, NULL);
+ desc = pirq_spin_lock_irq_desc(pirq, NULL);
if ( desc == NULL )
{
rc = -EINVAL;
WARN_ON(!spin_is_locked(&d->event_lock));
BUG_ON(!local_irq_is_enabled());
- desc = pirq_spin_lock_irq_desc(d, pirq, NULL);
+ desc = pirq_spin_lock_irq_desc(pirq, NULL);
if ( desc == NULL )
{
WARN_ON(!spin_is_locked(&d->event_lock));
BUG_ON(!local_irq_is_enabled());
- desc = pirq_spin_lock_irq_desc(d, pirq, NULL);
+ desc = pirq_spin_lock_irq_desc(pirq, NULL);
BUG_ON(desc == NULL);
if ( !(desc->status & IRQ_GUEST) )
extern irq_desc_t *domain_spin_lock_irq_desc(
struct domain *d, int irq, unsigned long *pflags);
extern irq_desc_t *pirq_spin_lock_irq_desc(
- struct domain *, const struct pirq *, unsigned long *pflags);
+ const struct pirq *, unsigned long *pflags);
static inline void set_native_irq_info(unsigned int irq, const cpumask_t *mask)
{